/**
 * 该文件黑马接口，封装axios的
 */

import axios from "axios";

import { ElMessage } from 'element-plus'

//创建axios的实例
const request = axios.create({
    //黑马接口
    baseURL: "http://vue-shop-api-t.itheima.net/api/private/v1/",
    // 超时时间的设置，单位是 ms
    timeout: 1000 * 10
})

//请求拦截
request.interceptors.request.use(
    (config) => {
        // 获取 token
        return config
    },
    (error) => {
        return Promise.reject(error)
    }
)

//响应拦截
request.interceptors.response.use(
    (response) => {
        // http状态码为 2xx 就会进入这个回调

        //1.解构出后端的响应数据
        const { data } = response
        //2.判断data.status是否为'200'
        if (data.meta.status == 200) {
            //登录成功
            ElMessage({
                showClose: true,
                message: `${response.data.meta.msg}`,
                type: 'success',
            })
            //获取的数据
            return data
        } else {
            //请求失败，直接提示用户
            ElMessage({
                showClose: true,
                message: `${response.data.meta.msg}`,
                type: 'error',
            })
            // 不希望代码走到 .then 直接抛出异常
            throw new Error(data.message || "网络异常，请稍后重试！");
        }
    },
    (error) => {
        // http状态码不为 2xx 就会进入这个回调
        // TODO: 后续根据不同的状态码做一些额外的逻辑处理。比如说：
        //      401 登录过期了。刷新页面重新登录。
        //      403 没有权限。提示用户去申请权限之类的。
        return error
    }
)

//将request导出
export default request